674. 最长连续递增序列

674. 最长连续递增序列 - 力扣(LeetCode)

Similar Question

Solution Tips

方案一: 滑动窗口 (贪心思想)

p9OZ5tI.png

var findLengthOfLCIS = function(nums) {
    // 窗口的大小是动态的, 如果遇到递减的数, 直接把 start 挪动到这个位置
    let start = 0;
    let end = 1;
    let maxLen = 0;
    while (end < nums.length) {
        if (nums[end] > nums[end - 1]) {
            end++;
        }
        else {
            maxLen = Math.max(maxLen, end - start)
            start = end;
            end++;
        }
    }

    maxLen = Math.max(maxLen, end - start)

    return maxLen;
};

感觉有点强行滑动窗口了, 还不如直接一轮遍历, 记录大小

var findLengthOfLCIS = function(nums) {
    let ans = 0;
    const n = nums.length;
    let start = 0;
    for (let i = 0; i < n; i++) {
        if (i > 0 && nums[i] <= nums[i - 1]) {
            start = i;
        }
        ans = Math.max(ans, i - start + 1);
    }
    return ans;
};

方案二: 动态规划

感觉也有点强行 dp 的意思

var findLengthOfLCIS = function(nums) {
    // 如果要用 dp 的思想来做
    // dp[i] 以 nums[i] 结尾的最长递增子数组的长度
	if (nums.length === 1) return 1;
    const dp = Array.from({ length: nums.length });
    dp[0] = 1;
    let res = 0;
    for (let i = 1; i < nums.length; i++) {
        dp[i] = nums[i] > nums[i - 1] ? dp[i - 1] + 1 : 1;
        res = Math.max(res, dp[i]);
    }

    return res
};
console.log(findLengthOfLCIS([1,3,5,4,7]));